{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "u9UN5nFIlRCz"
   },
   "source": [
    "<hr />\n",
    "<h1 align=\"center\">Loading AWS Bitcoin blockchain data into ArcticDB, using AWS as storage</h1>\n",
    "<center><img src=\"https://raw.githubusercontent.com/man-group/ArcticDB/master/static/ArcticDBCropped.png\" alt=\"ArcticDB Logo\" width=\"400\">\n",
    "<hr />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "cPt51a4BemQX"
   },
   "source": [
    "### In this demo, we illustrate how to use AWS with ArcticDB. We are going to\n",
    "* Set up AWS access\n",
    "* Initialise ArcticDB with AWS as storage\n",
    "* Read a section of the Bitcoin blockchain from an AWS public dataset\n",
    "* Store the data in ArcticDB\n",
    "* Read the data back\n",
    "* Perform a simple analysis on the data\n",
    "\n",
    "Note: This is set up to run on Google colab. It will need some simple changes to remove the Google drive code to run in other enviroments\n",
    "\n",
    "<hr />"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "o5teLkoVQbvD"
   },
   "source": [
    "![AwsBlockchainNotebookDiagram.PNG]()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "0sl1JPromJB6"
   },
   "source": [
    "### Install ArcticDB and S3 libraries"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "id": "QC4mJ72vQqeL"
   },
   "outputs": [],
   "source": [
    "# s3fs is used by pandas.read_parquet('s3://...')\n",
    "%pip install arcticdb boto3 tqdm s3fs fastparquet"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "nOJgw1G1w5DD"
   },
   "source": [
    "### Imports"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "id": "zCQi46y8w0fn"
   },
   "outputs": [],
   "source": [
    "import os\n",
    "from uuid import uuid4\n",
    "from datetime import timedelta, datetime\n",
    "from tqdm import tqdm\n",
    "import boto3\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from botocore import UNSIGNED\n",
    "from botocore.client import Config\n",
    "import arcticdb as adb\n",
    "from google.colab import drive, userdata"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "R_zrbJt1wTy_"
   },
   "source": [
    "### Read or Create AWS config"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 0
    },
    "id": "hCi_vwbuXlOc",
    "outputId": "a96fca5c-8273-41ef-8e58-b326bfec14d0"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n"
     ]
    }
   ],
   "source": [
    "# mount Google Drive for the config file to live on\n",
    "drive.mount('/content/drive')\n",
    "path = '/content/drive/MyDrive/config/awscli.ini'\n",
    "os.environ['AWS_SHARED_CREDENTIALS_FILE'] = path"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "id": "SqWjlzEcmwwR"
   },
   "outputs": [],
   "source": [
    "check = boto3.session.Session()\n",
    "no_config = check.get_credentials() is None or check.region_name is None\n",
    "\n",
    "if no_config:\n",
    "    print('*'*40)\n",
    "    print('Setup your AWS S3 credentials and region before continuing.')\n",
    "    print('https://boto3.amazonaws.com/v1/documentation/api/latest/guide/credentials.html')\n",
    "    print('*'*40)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Lf9pIqTremQZ"
   },
   "source": [
    "#### Create a config file\n",
    "* You should only need to run this section once\n",
    "* Enter your AWS details below and change `write_aws_config_file` to True\n",
    "* Future runs can pick up the config file you have save in your Drive"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "id": "BQCAYS7vemQZ"
   },
   "outputs": [],
   "source": [
    "aws_access_key = \"my_access_key\"\n",
    "aws_secret_access_key = \"my_secret_access_key\"\n",
    "region = \"my_region\"\n",
    "\n",
    "config_text = f\"\"\"\n",
    "[default]\n",
    "aws_access_key_id = {aws_access_key}\n",
    "aws_secret_access_key = {aws_secret_access_key}\n",
    "region = {region}\n",
    "\"\"\"\n",
    "\n",
    "write_aws_config_file = False\n",
    "if write_aws_config_file:\n",
    "    with open(path, 'w') as f:\n",
    "        f.write(text)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "HA5yoFW2vCxx"
   },
   "source": [
    "### Set up the AWS bucket\n",
    "* First check for existing buckets to use\n",
    "* Set up a new bucket if there are no suitable existing ones"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 0
    },
    "id": "7BbWrSMCvFX6",
    "outputId": "c8479c7a-70be-404d-f3fe-3ba52dd4e1cc"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Bucket found: arcticdb-data-bda6914b-2715-4acd-8b52-fa593af295bd\n"
     ]
    }
   ],
   "source": [
    "s3 = boto3.resource('s3')\n",
    "region = boto3.session.Session().region_name\n",
    "\n",
    "bucket = [b for b in s3.buckets.all() if b.name.startswith('arcticdb-data-')]\n",
    "\n",
    "if bucket:\n",
    "    bucket_name = bucket[0].name\n",
    "    print('Bucket found:', bucket_name)\n",
    "else:\n",
    "    bucket_name = f'arcticdb-data-{uuid4()}'\n",
    "    s3.create_bucket(Bucket=bucket_name, CreateBucketConfiguration={'LocationConstraint':region})\n",
    "    print('Bucket created:', bucket_name)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Du9feUapfNIY"
   },
   "source": [
    "### Initialise ArcticDB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 0
    },
    "id": "iTryr939Txog",
    "outputId": "76295e34-deb0-4ee4-ae4c-4ec6fce42b8f"
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Library(Arctic(config=S3(endpoint=s3.eu-north-1.amazonaws.com, bucket=arcticdb-data-bda6914b-2715-4acd-8b52-fa593af295bd)), path=btc, storage=s3_storage)"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# create an arcticdb instance in the bucket\n",
    "arctic = adb.Arctic(f's3://s3.{region}.amazonaws.com:{bucket_name}?aws_auth=true')\n",
    "\n",
    "if 'btc' not in arctic.list_libraries():\n",
    "    # library does not already exist\n",
    "    arctic.create_library('btc', library_options=adb.LibraryOptions(dynamic_schema=True))\n",
    "library = arctic.get_library('btc')\n",
    "library"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "_29nxrb4kQj0"
   },
   "source": [
    "### Mark the BTC blockchain data from June 2023 for processing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "id": "7g57h2HGkO1n"
   },
   "outputs": [],
   "source": [
    "# create the list of all btc blockchain files\n",
    "bucket = s3.Bucket('aws-public-blockchain')\n",
    "objects = bucket.objects.filter(Prefix='v1.0/btc/transactions/')\n",
    "files = pd.DataFrame({'path': [obj.key for obj in objects]})"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 0
    },
    "id": "3AMV2YB-YJip",
    "outputId": "1f65efe4-8506-4a53-c44e-5147bed67cd7"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Identified 30 / 5506 files for processing\n"
     ]
    }
   ],
   "source": [
    "# filter only the 2023-06 files to keep run time manageable\n",
    "files_mask = files['path'].str.contains('2023-06')\n",
    "to_load = files[files_mask]['path']\n",
    "print(f\"Identified {len(to_load)} / {len(files)} files for processing\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "4cwsv8XlfZIu"
   },
   "source": [
    "### Read the data from an AWS public dataset as parquet files\n",
    "This takes some time to run, like 5 to 10 mins"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 0
    },
    "id": "IS49VzDuIvup",
    "outputId": "d85516f8-c797-4a0d-b6d4-3f422c282067"
   },
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "100%|██████████| 30/30 [02:50<00:00,  5.67s/it]\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Read and assembled 12147125 transaction records from AWS\n",
      "CPU times: user 31.8 s, sys: 9.58 s, total: 41.4 s\n",
      "Wall time: 2min 59s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "df_list = []\n",
    "for path in tqdm(to_load):\n",
    "    one_day_df = pd.read_parquet('s3://aws-public-blockchain/'+path,\n",
    "                                 storage_options={\"anon\": True},\n",
    "                                 engine='fastparquet')\n",
    "    # fixup types from source data\n",
    "    one_day_df['hash'] =  one_day_df['hash'].astype(str)\n",
    "    one_day_df['block_hash'] = one_day_df['block_hash'].astype(str)\n",
    "    one_day_df['outputs'] = one_day_df['outputs'].astype(str)\n",
    "    one_day_df['date'] = pd.to_datetime(one_day_df['date'], unit='ns')\n",
    "    if 'inputs' in one_day_df.columns:\n",
    "        one_day_df['inputs'] = one_day_df['inputs'].astype(str)\n",
    "    # index on timestamp\n",
    "    one_day_df.set_index('block_timestamp', inplace=True)\n",
    "    one_day_df.sort_index(inplace=True)\n",
    "    df_list.append(one_day_df)\n",
    "df_aws = pd.concat(df_list).sort_index()\n",
    "print(f\"Read and assembled {len(df_aws)} transaction records from AWS\")\n",
    "# release the list to enable garbage collection\n",
    "df_list = None"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "Sa6YdBfuCnA7"
   },
   "source": [
    "### Write the data to ArcticDB"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 0
    },
    "id": "PdrRyH4P89Bv",
    "outputId": "239b1b3e-a5db-4241-94a5-8d46021dc508"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "CPU times: user 27.2 s, sys: 4.47 s, total: 31.6 s\n",
      "Wall time: 45.3 s\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "VersionedItem(symbol='transactions', library='btc', data=n/a, version=1487, metadata=None, host='S3(endpoint=s3.eu-north-1.amazonaws.com, bucket=arcticdb-data-bda6914b-2715-4acd-8b52-fa593af295bd)')"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%%time\n",
    "library.write('transactions', df_aws)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "qZPTE2l9emQb"
   },
   "source": [
    "### Read the data from ArcticDB\n",
    "This read also applies a date_range filter to get 25 days of data from 3 June"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 0
    },
    "id": "sRT9W55VYdiW",
    "outputId": "0c97dc76-b439-4951-89c2-76c65141f45c"
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "10097090\n",
      "CPU times: user 4.31 s, sys: 3.19 s, total: 7.51 s\n",
      "Wall time: 21.1 s\n"
     ]
    }
   ],
   "source": [
    "%%time\n",
    "plot_start = datetime(2023, 6, 3, 0, 0)\n",
    "plot_end = plot_start + timedelta(days=25)\n",
    "df = library.read('transactions', date_range=(plot_start, plot_end)).data\n",
    "print(len(df))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "vbQJY_1EemQb"
   },
   "source": [
    "### Chart the transaction fees per day"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "colab": {
     "base_uri": "https://localhost:8080/",
     "height": 630
    },
    "id": "_vq3zTo0Yuwh",
    "outputId": "77f079fb-823b-4fc0-f6ab-09d0059ebc4e"
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABJAAAAJlCAYAAACFXwi5AAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjcuMSwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/bCgiHAAAACXBIWXMAAA9hAAAPYQGoP6dpAACr2UlEQVR4nOzdZ3gU5fv28XNDSAESQuiRIiAdpFcRQZGiiEgTsYH+xQIoYgN7AwVEkCLNAlLsYhdEfoJSpNpQsNB7J6EGSK7nBU9WloQhEZbNjd/PceRQZiaz51yZe3f22tkZn5mZAAAAAAAAgFMIC3UAAAAAAAAAZG80kAAAAAAAAOCJBhIAAAAAAAA80UACAAAAAACAJxpIAAAAAAAA8EQDCQAAAAAAAJ5oIAEAAAAAAMATDSQAAAAAAAB4ooEEAAAAAAAATzSQAJxXunbtqgsvvDBo67/wwgvVunXrs7Iun8+nnj17npV1SdLs2bPl8/k0e/bss7bO7M7n8+npp58+7XLbtm1Thw4dlD9/fvl8Pg0bNizo2XBm+JsBAABkLzSQAPhNmDBBPp8v4KdQoUJq2rSpvvrqK/9yXbt2TbdcRj9du3b1/860adPUqlUrFShQQBEREUpISFCnTp30v//977S5Tl5v7ty5ValSJT3//PM6ePBgMEqBU2jSpEmm/vaZaepMnTr1nDUF7r//fs2YMUP9+vXTpEmT1LJly3PyuPj3XPqbbdiwQc8884zq1q2rfPnyqUCBAmrSpIm++eabDJffu3evunfvroIFCyp37txq2rSpli1bFrDMrl27NHjwYDVu3FgFCxZUXFyc6tevr3fffTfd+n777Td17NhRpUuXVq5cuVSgQAE1btxYn332WZa2Y/78+WrUqJFy5cqlIkWK6N5779X+/fszXHbZsmVq06aN4uPjlStXLlWpUkXDhw/P9GN9+umnqlmzpqKiolSiRAk99dRTOnbsWMAy3333ndq0aaPixYsrKipKRYoUUcuWLTVv3rxMP86mTZvUqVMnxcXFKTY2Vtdee61Wr16d4bKvv/66KlasqKioKJUtW1YjRozI9ONIma9fcnKyHnnkESUkJCg6Olr16tXTzJkzs/RYmc2ale0/2YABA/Txxx9nKdfpZGW/ljJXq4MHD2rUqFFq3ry5ihYtqpiYGNWoUUOjR49WSkpKwLKbN2/WTTfdpPLlyysmJkZxcXGqW7euJk6cKDPL9HasWLFCLVu2VJ48eRQfH6+bb75ZO3bsyHDZVatWqUuXLipUqJCio6NVtmxZPfbYY6d9jKxslyRt2bJF3bt3V6lSpRQdHa0yZcqoT58+2rVrV6a2KTPPS2kyM369ZLZ+qampGjRokEqVKqWoqChdfPHFevvttzP9OFnJmpXtB/7TDAD+vzfffNMk2bPPPmuTJk2yt956ywYPHmyVK1c2SfbZZ5+Zmdn8+fNt0qRJ/p9nn33WJFn37t0Dps+fP99SU1Ota9euJslq1Khh/fv3t9dff92ef/55q1WrlkmyefPmeeaSZFdeeaV/vaNHj7YuXbqYJOvQoUPAsrfeequVLFkyWCWykiVL2tVXX31W1iXJevTocVbWZWaWkpJihw4dspSUlLO2zpN9/fXXAX/je++91yTZo48+GjD9559/Pu26rr766jP+W0myp5566rTLFS5c2G688cYzeiycWy79zUaMGGHR0dF2ww032MiRI23YsGFWs2ZNk2RvvPFGwLIpKSnWsGFDy507tz399NM2cuRIq1SpksXExNiff/7pX+6zzz6znDlz2rXXXmvDhg2zkSNHWtOmTU2SPfnkkwHr/OKLL6xFixb29NNP27hx42zYsGF26aWXmiQbO3Zsprbhxx9/tKioKKtRo4aNHj3aHnvsMYuMjLSWLVumW3bGjBkWERFh9erVs5dfftnGjRtnjzzyiD300EOZeqwvv/zSfD6fNW3a1MaNG2e9evWysLAwu+uuuwKWGz9+vF177bX2/PPP22uvvWaDBw+2atWqWVhYmH311VenfZx9+/ZZ2bJlrVChQjZw4EB7+eWXrXjx4lasWDHbuXNnwLJjxowxSda+fXsbN26c3XzzzSbJXnzxxUxtU1bq17lzZwsPD7cHH3zQxo4daw0aNLDw8HD7/vvvM/VYmc2ale3PSO7cue3WW2/NVKbMysp+bZa5Wv3666/m8/msWbNmNmjQIBszZoxdd911JsluueWWgPX9/PPPdtlll9mjjz5qY8aMsREjRlibNm1MkvXr1y9T27BhwwYrUKCAlSlTxl555RXr37+/5cuXz6pVq2bJyckBy/7444+WN29eq1Spkr344os2fvx4e+KJJ6xr166nfZysbNe+ffusZMmSVqBAAXvyySdt/Pjx1rNnT8uZM6dVr179tMcFmX1eMsv8+D0b9evbt69JsjvuuMPGjRtnV199tUmyt99+O1OPldmsWdl+4L+OBhIAv7QG0uLFiwOm796923LmzGldunTJ8PcWL15skuzNN99MN2/w4MEmyXr37m2pqanp5r/11lu2cOFCz1ynarR06NDBwsLC7NChQ/5p/+UGUii8//77Jsm+/fbbLP/uuWwg+Xw+52t9po4ePZru4Dw7y+zfbP/+/ecgjbfly5fbjh07AqYdPnzYKlSoYMWKFQuY/u6775oke//99/3Ttm/fbnFxcXbDDTf4p61evdrWrl0b8Lupqal2+eWXW2Rk5Gm3+9ixY1atWjUrX758prahVatWVrRoUUtMTPRPGz9+vEmyGTNm+KclJiZa4cKF7brrrvvXzepKlSpZtWrV7OjRo/5pjz32mPl8PluxYoXn7x44cMAKFy5sLVq0OO3jDBw40CTZokWL/NNWrFhhOXLkCGgWHDx40PLnz5/uuf3GG2+03Llz2+7du0/7WJmt38KFC02SDR482D/t0KFDVqZMGWvQoMFpHycrWTO7/acSjAZSVvbrzNZqx44dtnz58nSP1a1bN5Nkf/3112lztW7d2nLnzm3Hjh077bJ33323RUdH27p16/zTZs6cma5hm5KSYlWqVLF69erZwYMHT7vek2Vlu6ZMmWKS7PPPPw9Y9sknnzRJtmzZMs/HyuzzktmZjV+zzNdv48aNljNnzoDXgdTUVLv00kutWLFimfpbZTZrVrYf+K+jgQTA71QNpNTUVIuNjU33iVeaUzWQDh48aPHx8VahQoVMvdCfyqkaLT179rQcOXIEHBhk1EDav3+/9enTx4oVK2YRERFWrlw5Gzx4cIYNrUmTJlmdOnUsOjra4uLi7NJLLw04+M+ogTRhwgTLkSOHPfjgg/5pKSkpNmzYMKtSpYpFRkZagQIFrEWLFgG1TduuadOmWeXKlS0iIsIqVaqU7pP1tWvX2t13323lypWzqKgoi4+Ptw4dOtiaNWsClvv222/TNXMuu+wyq1y5sv3222/WpEkTi46OtoSEBBs4cGC6bV+3bl2mDv5OdKoG0qhRo6xSpUoWERFhRYsWtXvuucf27NkTkEtSwE/a3y05OdmeeOIJq1mzpsXGxlquXLmsUaNG9r///S/d45+ugZS2T5/8k2bPnj123333+feNMmXK2IsvvpjujXFKSooNHTrUKlWqZJGRkVaoUCHr3r17ujeWixcvtubNm1v+/PktKirKLrzwQuvWrdtp65i2X82YMcOqVatmkZGRVrFiRfvwww/TLZuZzGvWrPG/8Ro6dKiVLl3awsLC7McffzxlhrT9cfLkyVauXDmLjIy0mjVr2pw5cwKWy8z+uGrVKpNkL7/8crrHmTdvnkmyqVOnZpjD62+WNm/27Nl29913W8GCBS0uLs7/u6fb78z+GRM///yzNW7c2KKjo61MmTL+Nw6zZ8+2unXrWlRUlJUrV85mzpx5ypqdTp8+fUySJSUl+ad17NjRChcunG4f6969u+XKlcsOHz7suc7hw4ebJPvll19O+/itW7e2woULn3a5xMRECw8PT3cGUXJysuXJk8duv/12/7TRo0ebJPv999/N7Pjza1YaSb/99ptJslGjRgVM37Rpk0my55577rTrSHtTfjp16tSxOnXqpJvevHlzK1OmjP/fX3zxhUmyL774ImC5+fPnmySbNGmSf9qBAwdsxYoVAQ3DrNTvoYceshw5cgQ0mszMBgwYYJJs/fr1/mk7duywFStW2IEDB/5V1sxuf0YyGoMnNpOWLVtmLVu2tJiYGMudO7ddfvnltmDBAs91eslov85KrTLy6aefmiT79NNPT/v4PXv2NJ/Pl6lGT6FChaxjx47pppcrV86uuOIK/7+/+uork2RffvmlmR3fd87kWChNRtuVNi5PPn5Lm3661/bMPi9lZfweOXLEVqxYYZs3bw5YNrP1GzVqlEmy3377LWC5qVOnmqSAs9D27t1rK1assL179/qnZSXrmT4vA/8lXAMJQDqJiYnauXOnduzYod9++01333239u/fr5tuuilL65k7d652796tLl26KEeOHGeU6fDhw9q5c6d27typdevWaerUqZo4caK6dOmi8PDwU/6emalNmzYaOnSoWrZsqZdfflnly5fXQw89pD59+gQs+8wzz+jmm29Wzpw59eyzz+qZZ55R8eLFPa/TNG7cOHXr1k19+/bV4MGD/dNvv/129e7dW8WLF9fAgQPVt29fRUVF6Ycffgj4/blz5+qee+5R586dNWjQIB0+fFjt27cPuGbB4sWLNX/+fHXu3FnDhw/XXXfdpVmzZqlJkyaZugbUnj171LJlS1WrVk1DhgxRhQoV9MgjjwRc10qSbrnlFlWsWPG06zudp59+Wj169FBCQoKGDBmi9u3ba+zYsWrevLmOHj0qSXrsscdUvXp1FShQQJMmTdKkSZP810NKSkrSa6+9piZNmmjgwIF6+umntWPHDrVo0UI//fRTlrI0btxYkyZNkiRdeeWV/seSjl9f4rLLLtPkyZN1yy23aPjw4brkkkvUr1+/dPvGnXfeqYceekiXXHKJXnnlFXXr1k1TpkxRixYt/Nu0fft2NW/eXGvXrlXfvn01YsQI3Xjjjen+5qfy119/6frrr1erVq30wgsvKDw8XB07dgy43kdWMkvSm2++qREjRqh79+4aMmSI4uPjPTPMmTNHvXv31k033aRnn31Wu3btUsuWLbV8+XL/MpnZH0uXLq1LLrlEU6ZMSfcYU6ZMUUxMjK699toMM3j9zdLcc889+v333/Xkk0+qb9++kjK336XZs2ePWrdurXr16mnQoEGKjIxU586d9e6776pz58666qqr9OKLL+rAgQPq0KGD9u3b51m3U9m6daty5cqlXLly+af9+OOPqlmzpsLCAg/B6tatq4MHD+rPP/887TolqUCBAunmHThwQDt37tSqVas0dOhQffXVV7riiitOm/PXX3/VsWPHVLt27YDpERERql69un788Uf/tG+++UaxsbHatGmTypcvrzx58ig2NlZ33323Dh8+fNrHSlvXyY+VkJCgYsWKBTxWmqSkJO3cuVMrV67Uo48+quXLl592u1JTU/XLL7+kexzpeK1XrVrl/7ueKlOtWrUUFhYWkGnRokWqWLGiRo4c6Z+Wlfr9+OOPKleunGJjY9NlkhTwHDdy5EhVrFhRixYtCvj9zGTNyvZnZNKkSYqMjNSll17qH4N33nmnpOPX3Lr00kv1888/6+GHH9YTTzyhNWvWqEmTJlq4cOEp1+klo/06K7XK7DrTHDp0SDt37tTatWs1ceJEvfnmm2rQoIGio6M917lp0yZt3779lHU9eaxIUmRkpGrXrq3cuXMrV65c6ty5s3bv3u35OFndrsaNGyssLEz33XeffvjhB23cuFFffvml+vfvr7Zt26pChQqe68zs81JWxu+mTZtUsWJF9evXL2BaZuv3448/Knfu3OmOS9L+/icuO23aNFWsWFHTpk0L+P3MZj3T52XgPyXUHSwA2cepPvmPjIy0CRMmnPL3TnUG0iuvvGKSbNq0aWeUK6NMkqxt27bpPhU6+Qykjz/+2CTZ888/H7Bchw4dzOfz2d9//21mZn/99ZeFhYVl+LWME89UOvEMpFdeecV8Pl+6T8z/97//mSS79957023LieuSZBEREf4MZsevzyDJRowY4Z+W0SeiCxYsMEn21ltv+aed6gykk5dLTk62IkWKWPv27QPWmbZsVpx8BtL27dstIiLCmjdvHlDHkSNHprsezKm+wnbs2LF0X7Xas2ePFS5c2G677baA6crkV9iUwVlszz33nOXOnTvd9Q369u1rOXLk8H+6/f3335skmzJlSsBy06dPD5g+bdq0DD8BzoySJUuapIAzjhITE61o0aJWo0aNLGdOOwMpNjbWtm/fnqkMaeNqyZIl/mnr1q2zqKgou+666/zTMrs/jh07Nt0n30eOHLECBQpk6msxGf3N0p6jGjVqFPBJflb2u7T9/MQzoFauXGmSLCwszH744Qf/9BkzZmT43JYZf/31l0VFRdnNN98cMD137tzp9mOzf84smT59+inXuWvXLitUqJBdeumlGc6/8847/X/HsLAw69ChQ6a+fpU2jr/77rt08zp27GhFihTx//viiy+2XLlyWa5cuaxXr1724YcfWq9evUySde7c+bSPlfa15ozOHqlTp47Vr18/3fQWLVr4tysiIsLuvPPOgK8uZ2THjh0mHb+m38nSzmxYuXKlmZn16NHDcuTIkeF6ChYsGLBdac+zJz7vZKV+lStXtssvvzzdcmlnS4wZM8Y/7amnnkr3nJ7ZrFnZ/lM51VfY2rZtaxEREbZq1Sr/tM2bN1tMTIw1btzYc50ZOdV+nZVanSw5OdkqVapkpUqVCjhLOc0LL7wQcDxxxRVXnPaMJrN/jndOfK5L89BDD5kk/3FJ2rWV8ufPbzfeeKN98MEH9sQTT1h4eLg1bNgww7OgT8dru1577TWLi4tLd9ZYRtt/ssw+L2Vl/Ka9Dp24D2WlfldffbWVLl063XIHDhwwSda3b1//tLTXhhOfq7OS9Uyel4H/Gs5AApDOqFGjNHPmTM2cOVOTJ09W06ZN9X//93/66KOPsrSepKQkSVJMTMwZZ7r22mv9mT755BP169dP06dPV5cuXTzvnPLll18qR44cuvfeewOmP/DAAzIz/1k4H3/8sVJTU/Xkk0+m+wTK5/OlW++gQYN03333aeDAgXr88ccD5n344Yfy+Xx66qmn0v3eyetq1qyZypQp4//3xRdfrNjY2IC75Jz4iejRo0e1a9cuXXTRRYqLi8vUHULy5MkTcPZYRESE6tatm+5OPLNnz87SXWgy8s033+jIkSPq3bt3QB3vuOMOxcbG6osvvjjtOnLkyKGIiAhJxz9F3717t//T/bN5R5T3339fl156qfLly+c/u23nzp1q1qyZUlJS9N133/mXy5s3r6688sqA5WrVqqU8efLo22+/lSTFxcVJkj7//PN0Z7xkRkJCgq677jr/v2NjY3XLLbfoxx9/9H/inNnMadq3b6+CBQtmOkODBg1Uq1Yt/79LlCiha6+9VjNmzPDf9Sez+2OnTp0UFRUVcBbSjBkztHPnziyfzXiyO+64I+Csxqzud3ny5FHnzp39/y5fvrzi4uJUsWJF1atXzz897f8ze9eqNAcPHlTHjh0VHR2tF198MWDeoUOHFBkZme53oqKi/PMzkpqaqhtvvFF79+495R23evfurZkzZ2rixIlq1aqVUlJSdOTIkdPmTXvMU+U6MdP+/ft18OBB/xlw7dq10/Dhw3XnnXfqnXfe0V9//XXWHivNiy++qK+//lqvv/666tevryNHjpz2jk+ne5wTlzl06JD/Oed0mZo0aSIzC7jTZFa2KSt//6efflpmpiZNmgT8fmayZmX7syIlJUVff/212rZtq9KlS/unFy1aVF26dNHcuXP9r/2Z4bVf/9uxIkk9e/bU77//rpEjR2Z4lvINN9ygmTNnaurUqerSpctp13diJilzdU27A1+dOnU0efJktW/fXs8++6yee+45zZ8/X7NmzTrt42Vluy644ALVrVtXw4YN07Rp09SnTx9NmTLFf5bm6bYrs2NFyty+fuGFF8rMNGHChIDH8fr9kx8rs3//rl27yswC7v4brHEJ/Ned+nsfAP6z6tatG3DK7w033KAaNWqoZ8+eat269SkPXk+Wdtr5v/36x4mKFSumZs2a+f/dpk0b5c+fXw8++KA+//xzXXPNNRn+3rp165SQkJCuiZV2SvS6deskHb/NblhYmCpVqnTaLHPmzNEXX3yhRx55RA899FC6+atWrVJCQsJpvy4kHX+DfrJ8+fJpz549/n8fOnRIL7zwgt58801t2rQpoMmTmJh42scoVqxYusZVvnz59Msvv5z2d7MqrZ7ly5cPmB4REaHSpUv755/OxIkTNWTIEK1cuTKgGVOqVKmzlvWvv/7SL7/8csoGy/bt2/3LJSYmqlChQp7LXXbZZWrfvr2eeeYZDR06VE2aNFHbtm3VpUuXDA9MT3bRRRel+zuVK1dOkrR27VoVKVIk05nTZLVeZcuWTTetXLlyOnjwoHbs2KEiRYpken+Mi4vTNddco6lTp+q5556TdPzraxdccIEuv/zyLOU62cnbldX9LqMxkTdvXhUvXjzdNEkB4/F0UlJS1LlzZ/3+++/66quvlJCQEDA/OjpaycnJ6X4v7etfp/oKTa9evTR9+nS99dZbqlatWobLVKhQwf9VlVtuuUXNmzfXNddco4ULF8rn8ykxMTHgjVBERITi4+P9j3mqXCdmSvv/G264IWC5Ll26aOzYsVqwYIHKli2r3bt3BzSvoqOjlTdv3iw9Vprq1av7//+mm25SzZo11bVrV33wwQcZ1uHEnJmpdXR09CkbbafKlJXHOrl+/+bvf+LvZyZrVrY/K3bs2KGDBw+mG2vS8dfV1NRUbdiwQZUrV87U+rz2639bq8GDB2v8+PF67rnndNVVV2W4TMmSJVWyZElJx/fl7t27q1mzZvrjjz8UHR2t/fv3+xtA0vEPNgoWLJjl/Spt/Sfq0qWL+vXrp/nz56tZs2anHJdZ2a558+apdevW+uGHH/zHb23btlVsbKyeeeYZ3XbbbZ7HN5mt9b8Zvyc/jtfvn/xYZzpWMpv1TB8L+C/hDCQApxUWFqamTZtqy5Ytp/10+URpb2R+/fXXoORKuwbGyWddBFvlypVVvnx5TZo0SWvWrDmjdZ3q2lAnvinv1auX+vfvr06dOum9997T119/rZkzZyp//vxKTU09K4+RnUyePFldu3ZVmTJl9Prrr2v69OmaOXOmLr/88kxtb2alpqbqyiuv9J/ZdvJP+/bt/csVKlTolMs9++yzko6fXfbBBx9owYIF6tmzpzZt2qTbbrtNtWrVCngjci4ypwnGQW9W9sdbbrlFq1ev1vz587Vv3z59+umnuuGGG9Kd5ZdVZ7pdpxoTZ2Os3HHHHfr88881YcKEDBtlRYsW1ZYtW9JNT5t2csNJOn59tldffVUvvviibr755kxn6dChgxYvXuy/fsd9992nokWL+n/atWvnz3RihpNznZgp7f8LFy4csFxagzWt2dauXbuAx7rvvvuy/FgZiYiIUJs2bfTRRx95nhUQHx+vyMjITNW6aNGiSklJSdeAPXLkiHbt2nXaTFnZpn/z9z/5sTKTNSvbHyqn26//Ta0mTJigRx55RHfddVe6s4O9dOjQQRs2bPAfT7z00ksB+2+dOnX8mU7McHKutLqfmO90Y+VU4zIr2zV27FgVLlw43fV+2rRpIzPT/PnzPbc/s7U+0/GblfoVLVpUW7duTff8m5WxktmsZzougf8SzkACkClpXxfIyhvhRo0aKV++fHr77bf16KOPnvGFtP9NppIlS+qbb77Rvn37As5CWrlypX++JJUpU0apqan6/fffAz7tzkiBAgX0wQcfqFGjRrriiis0d+7cgIOLMmXKaMaMGdq9e3emzkI6nQ8++EC33nqrhgwZ4p92+PBh7d2794zXfbal1fOPP/4I+HrDkSNHtGbNmoCzyDL6aqB0fHtLly6tjz76KGCZjL4SeCbKlCmj/fv3B2Q61XLffPONLrnkkkw1LurXr6/69eurf//+mjp1qm688Ua98847+r//+z/P3/v7779lZgHbnPbG/8ILL8xS5n8rowbxn3/+qVy5cvnPesrK/tiyZUsVLFhQU6ZMUb169XTw4MEsNUAyKyv7XTA99NBDevPNNzVs2LB0Zx2kqV69ur7//nulpqYGNNIWLlyoXLly+c86SzNq1Cg9/fTT6t27tx555JEs5UlrsKSdGfbwww8HfH0wX758kqQqVaooPDxcS5YsUadOnfzzjxw5op9++ilgWq1atTRz5kz/RbTTbN68WZL8+8mQIUMCztxKe45Me35dsmSJ/2K4ab+/ceNGde/ePVPbZWbat2/fKcdkWFiYqlatqiVLlqSbt3DhQpUuXdr/mnBiphPP7FiyZIlSU1NP+5qQlfpVr15d3377rZKSkgIuDp128enTPVZms2Zl+08lo+foggULKleuXPrjjz/SzVu5cqXCwsLSncmXkczs11mt1SeffKL/+7//U7t27TRq1KjTZjjRyWPllltuUaNGjfzz0/azCy64QAULFsywrosWLQrIVKtWLY0fP16bNm0KWO7ksXKqcZmV7dq2bZv/a8YnSjuD93Rf+czs89KZjt+s1K969ep67bXXtGLFioCzp/7NWDld1qw+LwP/aef+sksAsqu0ixCefBHgI0eOWNmyZS0iIiLd7XTNTn0RbTOzF1980STZAw88kOEFIydNmmQLFy70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16WsEmMsWFyqq+RWXpeOZyS39lvXautSXrIGD2PMAaHsXmUH69ats1q1atl1111nBw4cSHeLvex0yz2yBs+2bdvsqquusssvv9z279+fbn5GXfFQcam2LtXVzK28LmU1M9u7d69169bNatWqZUlJSenmHz16NASpMuZSbV3KauZWXpeymjHGgsWlupq5ldel4xkzt/Zb12rrUl6yBg9jzA2cgSRp0aJFCg8PV82aNSUdv91pcnKy4uLiQhssA2QNnr/++ktmpnLlykmSDh48qAMHDqhgwYIhTpaeS7V1qa6SW3ldyGr//5NvSdq5c6eOHDmihIQESdL+/fu1b98+FS1aNJQRM+RCbdO4lFVyK68LWRljweFaXV3Lm8al4xkp+++3J3Ktti7lJWvwMMYccM5bViG2du1ae+ONN+yLL76wb775JmBe2vcZX331VatatWq6u1aca2QNnh9//NFefPFFGzNmjE2ePDlgXlre0aNHW3R0tH388cehiOjnUm1dqquZW3ldympmNnPmTHvggQesb9++NmTIkIDvi6d9gjR69Gjz+Xw2ceLEUMU0M7dq61JWM7fyupTVjDEWLC7V1cytvC4dz5i5td+6VluX8pI1eBhjbvpPNZCGDBliVatWtXz58lmRIkWsbt26dvXVV9uXX37pXyYlJcWmTp1q11xzjW3bto2s51lWM7MXX3zRKleubAkJCVajRg2rUqWKVapUyaZMmeJfJiUlxWbPnm133XWXbdmyJWRZXaqtS3U1cyuvS1nNzJ577jmrVKmSVa5c2a655horVaqUxcXF2fDhw/3LpKam2p9//mnPPfecbd68OWRZXaqtS1nN3MrrUlYzxliwuFRXM7fyunQ8Y+bWfutabV3KS9bgYYy56z/TQNq1a5dFR0fbm2++acnJybZ27VobOXKktW3b1qpUqWKPPvqo7dq1y7/83r17yXqeZTUz2717t+XOndveeecdMzPbsWOHff7553b77bdbkSJF7MYbb7QNGzb4lz948GCoojpVW5fqauZWXpeympnt2bPH8uTJY5988omZme3fv99+/fVXe/TRRy1Pnjx2ySWX2B9//OFfPpTX43Cpti5lNXMrr0tZzRhjweJSXc3cyuvS8YyZW/uta7V1KS9Zg4cx5rb/TANp6tSpVq9evXQX3/rtt9/s8ccft8qVK9v48eNDlC4QWYPnyy+/tJo1a6Yb3Fu2bLHXX3/d6tSpY0899VRowp3Epdq6VFczt/K6lNXMbN68eXbxxRfbunXrAqYfPnzYZs2aZU2aNLHbbrstW9zW1KXaupTVzK28LmU1Y4wFi0t1NXMrr0vHM2Zu7beu1dalvGQNHsaY2/4zDaT58+dbVFSU/5Oakz366KOWK1cuW7169TlOlh5Zg2f58uWWM2dOGzduXIbzhw8fbmFhYfbTTz+d42TpuVRbl+pq5lZel7Kama1fv95iYmKsf//+Gc5/7733LEeOHDZnzpxznCw9l2rrUlYzt/K6lNWMMRYsLtXVzK28Lh3PmLm137pWW5fykjV4GGNu+880kA4cOGDXX3+9XXPNNfbrr7+mm79lyxa7+OKLbfbs2SFIF4iswfXggw9a48aN7bPPPkt3i8gDBw5Y/fr1bdq0aaEJd1IWl2rrSl3TuJTXpaxmZkOHDrWqVava8OHDbdOmTenmN23a1F577bUQJEvPpdq6lNXMrbwuZTVjjAWLS3U1cyeva8czZu7st67V1qW8ZA0uxpi7/hMNpNTUVDMzW7BggZUuXdoSEhJs/PjxtmPHDv+8P/74w/LkyWPLli0LZVSyBlFapl9//dWaNm1qBQsWtMcff9x+/PFHO3TokJkd74jnypXLFi1aFMqoTtXWpbqauZXXpawnWrt2rd1+++120UUX2R133GGffPKJ/zTlpUuXWnR0tC1YsCCkGV2qrUtZzdzK61LWEzHGgsOFup7IhbwuHc+YubXfulpbF/KSNXgYY+7zmZnpPHfs2DGZmXLmzClJuvfeezV69GhVrFhRV111ldatW6f169ercOHC+uijj8h6HmaVpF27dikmJkYRERGSpEGDBql///4qWbKkKlWqpO3bt2v//v0qVaqU3n333ZBmdam2LtVVciuvS1kl6e+//9YFF1yg6OhoSdJbb72ll19+WWFhYcqZM6cOHz4sn8+nqlWratKkSSHN6lJtXcoquZXXpawSYyxYXKqr5FZel45nJLf2W9dq61JesgYPY8x953UDadasWXrnnXe0bt065ciRQ82aNdMDDzwgSdqwYYOee+45bdmyRceOHVOLFi10++23KyYmhqznUVZJ+uSTTzRp0iStXbtWBw8e1DXXXKMHHnhAhQoV0v79+/XSSy9p586d2r17t9q0aaNrrrlGuXPnDklWl2rrUl1dy+tSVkmaMmWKJkyYoDVr1mjXrl265ppr1KNHD9WrV0+HDx/WlClTtGvXLm3atElt2rRRw4YN/W98zjWXautSVtfyupRVYowFi0t1dS2vS8czklv7rWu1dSkvWYOHMXb+OG8bSBs3btTFF1+sq6++2v/i+fHHHytnzpwaOnSoOnXqJEnav3+/8uTJE8qoZA2ijRs3qnLlyuratasKFCggM9Prr7+upKQkPfroo3rooYckSUePHvV3l0OZ1ZXaulRXya28LmWVjuctX768HnjgAZUpU0ZmpmHDhmnFihW68847NWjQIEVFRYU6piS3autSVsmtvC5llRhjwczqSl0lt/K6dDwjubffulZbV/KSNXgYY+eZc/A1uZC48cYbrW3btv5/JyYm2s8//2zdu3e3qKgo69atm/974mnfYQwVsgbP7bffbq1bt/b/OzU11fbs2WPPPfecRUVFWfPmzW3Hjh3+eaHkUm1dqquZW3ldympmdu+991qrVq3STX/zzTctPj7eatSoYRs3bgxBsvRcqq1LWc3cyutSVjPGWLC4VFczt/K6dDxj5tZ+61ptXcpL1uBhjJ1fwkLdwAqG1NRUxcTEqESJEv5psbGxuvjiizV48GCNGjVKy5Yt08yZMyVJPp8vVFHJGmQFCxYM6A6bmeLi4vT444/ryy+/1Pbt2zVhwgRJ1DYrXKlrGpfyupRVkooVK6bDhw/7/52cnCxJ6tq1q5YsWaKcOXNqwIABoYoXwKXaupRVciuvS1klxliwuFRXyZ28rh3PSO7st67V1qW8ZA0uxth5JkSNq6B74YUXLFeuXDZ//vwM57dt29aaNGliycnJ5zhZemQNntdff918Pp999tlnGc6/5557rHbt2rZv375znCw9l2rrUl3N3MrrUlYzs08++cR8Pl/AraJTU1PtyJEjZmbWv39/q1Kliv+TpVByqbYuZTVzK69LWc0YY8HiUl3N3Mrr0vGMmVv7rWu1dSkvWYOHMXZ+OW8bSAcOHLDrrrvOWrRoYe+9957t2rUrYP60adOsdu3atmfPntAEPAFZg+vOO++02rVr26BBg2z9+vUB87799lurVKmSbd++PUTp/uFabV2paxqX8rqU1czsmWeesTJlytg999xjv//+e8C8JUuW2IUXXmibNm0KUbpALtXWpaxmbuV1KasZYyxYXKqrmTt5XTueMXNnv3Wtti7lJWtwMcbOH+dtA8nMbMGCBdasWTMrX7689e7d2z766CM7ePCgrVq1ypo2bWo33HBDqCP6kfXsS/te6sqVK+2OO+6wmjVrWseOHe2VV16xPXv22KJFi+yyyy6zzp07hzjpP1yorWt1dSmvS1nN/sm7bds2GzBggDVq1MgaNmxoDz30kK1evdo+/fRTu/TSS61Tp04hTupWbV3KauZWXpeymjHGgsWlupq5l9fMjeMZM7f22zSu1DaNS3nJevYxxs4/5+1d2E40ePBgvf3225KktWvXKl++fCpUqJC+/vrrbHfLPbIGz1tvvaWPP/5Ya9as0S+//KISJUqobNmy+vDDD7NdXpdq61JdJbfyupRVkmbMmKEZM2bo+++/19KlS1W6dGlVr15dEyZMyHZ3qnCpti5lldzK61JWiTEWLC7VVXIrr0vHM5Jb+61rtXUpL1mDhzHmvvO6gZSSkqIcOXJIknbu3Km5c+cqPDxcERERql27tuLj40Oc8B9kDZ7U1FSFhR2/XnxSUpL+/PNPpaamyufzqUqVKv5bNIaCmQVcgM2l2mbnumbEpbwuZZUC8x46dEh79+7VgQMHZGYqXbq0f5/ODlyqrUtZJbfyupRVyt5j7MRsJ/87u9c2O9c1Iy7ldel4RnJrv3Wtti7lJWvwZOcx5vL7sVA47xpIJ+8AdvxregEHN6F2csYTp2e3rCcfGKbJjlm9uJQ3O2ZN22dP3h+yY1Yv2TmvC89dp5PRNmTHO1Rkx9qm1cqV/SDt0OHkv292zZsRl7KmYYz9e2m1SklJUVhYmGcds1NdMxpr2TnvibLjfuDFpbzZPasLr2W8Hzv3XMrrUtZz7byryMlPBD6fT2FhYf4X4FA78ckqNTU1YF52y3rs2LFTDprsllWStm7dqrVr12aYKS1vdrFw4UKNGzdOZpbt9wPpeKbk5OR0NcxudT2VY8eOScreedOeF1JSUvz/zo5ZT95fT5TR8292lB1rm/bG9lSvYdlJ2ieGaZlPlN3y7t+//5TzsltWSVq3bp1+/PHHgHF24mtBdhpjs2fP1jPPPON/fj1RdqxtcnKyDh48qBw5cpy2jtnluSvtmDHtA5w02TVvmpNfx7LT8YykU+bJjvvtqWTX2qbh/djZw/ux4HHt/Vh2cV6cgTR//nzNnDlTBQoU0JVXXqly5cr5552qYxsqDz30kBo1aqRrr73WPy27ZUxTrlw5vfvuu6pRo0a6edkx8xVXXKFOnTqpY8eO6U4tPPFUxOygatWq2rNnj+bNm6eSJUuGOo6nMWPG6Ntvv9W+ffvUvXt3tW3bNuCT3OxUV0n6888/9dVXXyk6OloxMTG64YYb/POyW9558+bpm2++UVhYmIoUKaI77rjDPy+7ZT1Zdv3EO82ff/6pGTNmqFChQipfvryqV6+ebTN//vnnmjlzpsLDw3XdddepUaNGpzzrLzvo0qWLmjVrpttuu80/LTvmlKSSJUvq7bffVsOGDdPNy46ZGzVqpHbt2ummm25SoUKFQh3HU+XKlbV27VrNnDkzw/pmJwMHDtS3336rtWvXqk+fPurevfspz/rLDubPn68ZM2YoOTlZCQkJ6tmzp39fzW6vDStXrtT//vc/xcTEKDY2NuD4NrtlPVl2/NufaOvWrZo9e7ZKlCihCy+8UAkJCdnyeSsN78eCg/djwePS+7FsxfMS2w4YPny41axZ0y688EKrUKGC3XPPPemWSbv6e6hNnTrVfD6fNWvWzO6++25bunSpf97hw4dDmCy9Z5991ooVK5ZuelJSUgjSnN7zzz9vZcqUsa1bt5qZ2fbt2+2bb76xefPm+ZdJSUkJVbwATz75pCUkJFjdunWtYsWK/lvxZpf99EQDBw60ypUrW7t27eyGG26wli1bmplZcnKyf5mUlJRsk33o0KFWr149K1WqlF1xxRVWsGBBq169un366aehjpbO4MGDrVKlSlaqVCm78sor7YILLrCiRYvaxIkT/ctkl7qamX344Yf27LPP2t9//+2flp3ynWj06NFWp04di4+PtzJlylj79u2z7XPXyy+/bNWrV7c6depYkyZNrGPHjumWyS7PXWZmH330kfl8Pqtevbq1bNnSvv32W/+8LVu22JEjR0IX7iQnv46lpKTYwYMHbfPmzf5p2WkfTnsd27t3r5mZrVu3zt566y374osv/Mtkl33hiSeesJIlS9rVV19thQoVsgULFoQ60im9+OKLVqlSJevZs6f16dPH6tSpYykpKbZv3z7/MqmpqdlmX3jppZesVq1aVqtWLbvpppssd+7cVrp0aRs3bpx/meyS9ZVXXrGqVatafHy8ValSxSpWrGi1a9e2zz77zL9MdslqZjZjxgybNGlStrhV+Om88cYb1qBBA4uOjraYmBi74447Qh3JE+/HgoP3Y8Hj0vux7MbpBlJSUpLFxsbalClTzMxs2rRpdsUVV9gXX3xhgwYNsscee8zWrl0b4pT/WLZsmcXHx9vtt99uTZs2tUaNGtlLL71kP/zwg1122WW2d+/ebDGoEhMTLSIiwj755BMzM5s9e7b16NHDKlWqZB06dLCXXnrJdu3aFeKU/zh06JBVrFjR3nvvPTMze/XVV61u3bpWtGhRi4uLszp16vifFEItMTHRcubMad99952tXbvWLr74YuvZs6d/fnZ60tq3b5/Fxsb637z8/vvv1rhxYxs8eLC1bdvWmjRpYj/99FOIU/4jKSnJ8uTJY++++66ZmW3dutWuv/568/l8ljt3brvtttuyzX67b98+i4mJ8Wfds2ePLVmyxHr16mWRkZHWvHlzW7duXYhT/mPfvn2WK1cuK1mypHXu3NneeuutgFqevN+Gcj9OSkqyfPny2RtvvGEHDx60X3/91YoXL57hwaxZ6LPGxMTYhx9+aGZmc+fOtSZNmtiECROsT58+dvPNN9sff/wRsnwZ2bJli5UuXdr69u1rHTt2tIsuush69uxpc+bMsdq1a9u2bduy1etYWvP4yy+/tBtvvNFKlChhjRo1snvvvdc2bdoU4pT/OHz4sNWoUcOmTp1qZmZDhgyx6tWrW/HixS0iIsLKly8fcAAeSmm1nTt3riUnJ9sVV1xhbdq0sd27d5tZ9nsdi4uLs+nTp5uZ2bZt26xJkyb24IMPWr169axq1ar25ZdfhjjlP9Jed6dNm2ZmZvv377c+ffqYz+eziIgIu/LKKwMaoKG0b98+y5Mnj7355puWnJxsGzZssA8++MBuuOEGK1iwoP3f//2fbdu2LdQx/fbt22c5c+a0hIQEu++++2z27Nl24MAB//zs9joWHx9vI0eOtF27dtncuXMtLi7Onn/++ZBl8sL7seDg/VjwuPR+LDtyuoHUo0cP/xkRZma7d++23LlzW506daxx48bWoEEDu+6667LVJw09e/a0Tz/91H799Ve766677LLLLrNChQpZmTJlsk3Xu3Pnzta4cWMzM1u1apVddNFF1rJlS3v44YetU6dOVq1aNRs0aFCIUx6XmppqO3bssMsuu8zmzZtn69ats/j4eHvzzTdt7ty5NmfOHLvqqqusZs2atnr16lDHtXbt2lmLFi38/544caKFh4fbgw8+mO2erKZMmWKNGjWyY8eOmdnxWkdGRlqLFi3soYcesmuvvdYKFy5sc+bMCXHS41577TW74oorzOyfJ/5ff/3VWrVqZS+99JKVL1/e3njjjVBG9Pv++++tSpUqtn79+oDpBw8etK+++soaNmxo3bt3zzZncwwcONAaN25so0aNspYtW1rt2rXtrrvusunTp9vRo0f9yy1evDjkz2OPPPKIXXnllWb2z34wdepUq1q1qiUmJvqX27x5c0D2ULjvvvusVatW/n8fOnTIoqKirGHDhta5c2dr2rSp1ahRw1auXBnClOk9/PDDNnz4cNu+fbu9+OKL1qxZM4uJibESJUrYwYMHQx3PzI6/jtWvX9/MzP7++28rUaKE3XjjjTZo0CB75JFHrE6dOtajR4+Q7wNmx/fTffv22RVXXGHTpk2z9evXW1xcnL333nv2xx9/2Lp16+zWW2+1ggUL2uLFi0Md19q2bRvwOvbFF19YTEyM3XTTTf7Xi+zi888/t/r16wecbRQdHW3XXXedjRw50u68806LiIjwN3FD7Z133rEmTZoEvHnduHGjXXXVVTZlyhS7+OKL7bnnngthwn988cUXVqNGjYDnVTOzDRs22OjRo61WrVrWv3//EKVL7/nnn7fGjRtb//79rXz58latWjUbMGCA/fzzzwH1/u2330L+2tunT590r2P9+/e3Sy65xI4cOeLPu2vXrmzR6OD9WHDwfix4XHo/lh0520BKTEy0W2+91aZOnep/8rzpppusdu3atnHjRjMze//99y1nzpw2e/bsUEY1s39eAMaNG2f169f3H7T269fPwsPDrVq1anbLLbcEnPYbCrt377aaNWtafHy8vfPOO9apUye76667bOfOnWZ2/KtLjz32mEVERNiqVatCmjVNamqq1alTx/r372+TJk2yjh07BhzE/vTTT1a0aFH76KOPQpjSbMWKFZYnTx77888/A6aPHj3aLrroopDnO9m3334bcEbPzTffbHXr1rVDhw6Zmdn69eutfPnyNnLkyFDG9Pv000+tRIkS9vPPP/unvfTSS1azZk0zO/6mt3jx4v5PyUNp3bp1FhMTY0OGDMlw/uTJky08PNzmzp17jpOld+zYMXvllVfszjvvNDOzI0eO2EsvvWQNGjSwSy+91B5//HFbunSp7dixwwoUKBDwFbxz7cCBA9a9e3cbMGBAQGNg48aNVrZsWfvtt9/M7Pjp002bNrVvvvkmVFHtwIEDdt9999kbb7zhf77q2rWr1a1b1/98O2/ePMubN2/IXxdO9sUXX1jlypVty5YtZnZ8nOXMmdMqVqxol156qb9RG6qDsP3799vll19uYWFhNmzYMGvfvr3dfffd/lP+jx07ZqNGjTKfz5etzqJs06aN9e7d2z777DPr2LFjwD68bds2q1ixYsib4KtWrbILLrgg3evYV199ZSVLlrSXX37ZPy07HIQvXbrUIiIibNSoUXbw4EHr3Lmz1a1b11/b5ORka9CggT377LMhTnrcd999Z/Hx8TZr1iz/tJdfftnKlStnZmbDhg2zuLg4/3FuKP3yyy8WERGR4XN+SkqKDRo0yMLDw+2XX34JQbpAycnJ9vzzz9t9991nZsc/rOnTp48VK1bMrrjiCnv99ddt3bp1tn37dqtQoYL/DLBQSEpKss6dO9uIESMCxtDy5cutTJky/rO6UlJSrGPHjiFvKvN+LDh4PxY8rr0fy46cbSAdOXLEfvjhB//1OA4ePGgtWrSw7777zr/M3r177corr7T3338/VDEzdM011/h3znLlytndd99tI0aMsIYNG1rXrl1Dmi05OdnmzZtnjzzyiBUoUMBiY2Pthx9+MLN/vrO6cuVKq1KlSsB3hkPt/ffftxo1atjNN99szZo1809Pe6Ho1KmTDRw4MFTxzOz4Vz/Svk5x4vUWdu7cae3atbP4+Phs0TBIs3fvXrvpppusXLlyVrlyZStTpoy9+eabAct06dLFHnjggdAEPMkff/xhVatWtV69etnHH39sb731loWHh9vbb79tZse/HlS5cmXbsGFDiJMe98ILL1jVqlVt7Nix6T6VS0lJsSZNmqSrd6gcPHjQ1qxZEzBt9erV1rt3b6tZs6a1adPG6tevb2XLlg1NwP/v6NGj9tprr/lPozf75zmgQYMG/tP/n3rqKStatGhIMqZJSUmxv/76y/9VxcOHD9sNN9xg8+fP9y9z6NAhu+aaawKufZJd3Hbbbfbaa6+Z2fHXsV69etmnn35q7dq1s3bt2oU0W2pqqm3cuNFeeeUVK1SokEVFRfnPlEx7Hdu0aZPVqVMn4BpOofbtt99a2bJl7aqrrrKLL77YnzXtAPyWW26xvn37hjKi7dq1y3+cdeLr2P79++3ee++1mJgY/9ctsoPU1FR75JFHrEiRIla6dGmrUaOGDRs2zMz+qWu3bt2yzfVltm/fbi1btrQuXbrY0KFDbejQoZYjRw7/Bzm//vqrVatWLdt8DaRXr17WtGlTmzFjhv/DpTT79u2zunXrZptrEK5fv96WL18eMO23336z6667zooVK2a33HKLtWjRwv5fe/ceHVV9r3/8mWTCNVwSQKAIBOTSSEDgCBZE0RNYFloUlIIWuVgUQRDvgr9iEbVStdiiPeeoQZFFK2iFosSIcNBwOQKponILCBKuDQmXRJBLYjKf3x+sGZncCCVf9jzwvNdiyexsMy+3OzOzv/nuvRMSEjwSnq6goMCmT58een01O70fFxYW2pVXXmkpKSlmdvp97LLLLvOKGUrHY24qKCiwzz77TMdjDmI7HovEaAeQglU0/Tz4m7KMjIwLKCq/4IWHX3vtNbv//vttxowZ9pOf/MS+//57Mzt9Tm6knCN86NAhS0tLs5dffrnUaTbbtm2zhISEsJkeXhX8oc/NzbX77rvPGjZsaD6fz6ZOnRqaabJhwwarV69exJxqVdYU/6KiIrv55pstOTk5Iq59c+YpYO+9955lZGTYuHHjbMiQIaF1srKyLC4uLiJ+oxRswYIF1qpVK2vWrJl16tTJJk2aFPra119/bS1btrTMzEwPhT+2a9cuGz58uCUmJtr9999vS5YsCZ3+s2nTJqtdu3bYB7BIqeRF01evXm033XST+Xy+iNkXzvQF//7CCy9Y7969bd++fVarVq3QNVEiuaysLGvatGlEXaA4uD0XLlxod9xxhz355JPWrFmz0GksWVlZoYtnel0gELDMzEybO3duqQHQHTt2WLNmzSLmg3cgELAffvjBZsyYYUlJSebz+Wz06NGhbblu3TqrV69eRA14ldWYMWMsMTExYq7XZHb6YGH9+vW2detWe/LJJy05OTn0Prx9+3aLi4uzTz75xGPlj61YscKSk5OtY8eOds0114SdsrZlyxZr2rSp57N6gq8D69evt2uvvdYuv/xymz59um3evDn0uXzbtm0WGxsbUfvCmYOyZ576lZqaGvq5i5SfseBpdIFAIGR96KGH7LbbbrPs7OyIex+r6PTVSDseC27b119/PeKPxw4fPmxpaWn2yiuvUByPHTx40MaPH09xPFbWLNlIOx6L1HxmZl7fCe7f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\n",
      "text/plain": [
       "<Figure size 1400x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fees_per_day = df.groupby(pd.Grouper(freq='1D')).sum(numeric_only=True)\n",
    "t = f\"BTC Blockchain: Total fees per pay from {plot_start} to {plot_end}\"\n",
    "ax = fees_per_day.plot(kind='bar', y='fee', color='red', figsize=(14, 6), title=t)\n",
    "ax.figure.autofmt_xdate(rotation=60)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "id": "cWnsFH4remQb"
   },
   "source": [
    "### Conclusions\n",
    "* We have give a simple recipe for using ArcticDB with AWS for storage\n",
    "* We have demonstrated that ArcticDB is significantly faster than Parquet files\n",
    "* We have shown how to read a subset of dates from a symbol of timeseries data\n",
    "* If we saved a much larger section of the blockchain, it could still be stored in one symbol and subset chunks read efficiently\n",
    "* Feel free to play around with the notebook to read a larger set of data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "id": "X-dFdrTdLVKs"
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "colab": {
   "provenance": []
  },
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.11.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
